#!bin/bash

#使用方式：bash test.sh extra-srcrpm.list
# 当统计一系列src.rpm源码包的时候，统计源码包中代码行数

# 日志文件路径
log_file="/var/linecount.log"
# 包行数记录文件路径
pkg_line_file="/var/pkg_line_counts.txt"

#总行数
total_lines=0

# 清空之前的日志和包行数记录文件
truncate -s 0 "$log_file" "$pkg_line_file"

# 统计每个src.rpm的代码行数
function linecount_src_rpm () {
    local src_rpm_file=$1
    local base_name=$(basename "$src_rpm_file" .src.rpm)
    if ! yumdownloader --source "$base_name" &> /dev/null; then
        echo "Failed to download source for $base_name" >> "$log_file"
        return 1
    fi

    local current_dir=$(pwd)

    # 创建目录用于存放解压内容
    local extract_dir=$(mktemp -d)
    mkdir -p "$extract_dir"

    # 进入创建的目录
    cd "$extract_dir"

    rpm2cpio "$current_dir/$src_rpm_file" | cpio -idmv

    #遍历解压后的文件夹并使用cloc统计每个文件的代码行数
    local pkg_line=0
    for file in *;do 
        local lines=$(cloc "$file" | awk '/^SUM:/ {print $NF}')
        pkg_line=$((pkg_line + lines))
    done
    # 记录每个包的代码行数
    echo "$base_name:$pkg_line" >> "$pkg_line_file"
    total_lines=$((total_lines + pkg_line))

    cd "$current_dir"
     rm -r "$extract_dir"
     rm -f "$src_rpm_file"
}

# 读取列表并处理每个包
while IFS= read -r package;do
    linecount_src_rpm "$package"
done < "$1"

#记录总行数
echo "Total lines: $total_lines" >> "$pkg_line_file"
